[上級編]LLMへ至る道~GPTの話~[20日目]
みなさんこんにちは!クルトンです。
前日では、BERTについてご紹介しました。TransformerモデルのEncoderを2つ使ったモデルでしたね。
本日からはGPT系のモデルを本日分のブログを含めて5日に渡ってご紹介していきます!
本日は初代GPTであるGPTについてです。
上記サイトの"Read Paper"と書かれているリンクから下記の論文"Improving Language Understanding by Generative Pre-Training"を確認できます。
GPTのできること
LLM(大規模言語モデル)について昨日のBERTに関するブログでも書いたものですが、GPTもpre-traningとfine-tuningを実行します。
GPTの中身をチェック!
GPTはGenerative Pre-trained Transformerの略で、Transformerモデルから派生したモデルです。
GPTではTransformerモデルのDecoderモデルを使っています。
イメージ図は下のようになります。
fine tuningにおいては入力するトークンの始まりを"< s >"という特殊トークンで、終わりを"< e >"という特殊トークンで挟みます。図中では< s >をStartで、< e >をExtractと書いています。
他にも特徴的なのが、出力が2種類ある事です。pre traningの時とfine tuningで出力が変わります。
pre traningでは次に来る単語を予測し、それらの確率を出して、適切な単語と単語の繋がり方を習得しています。つまりTransformer Decoderモデル部分を学習させています。
TransformerモデルのDecoderのみの構成を使用しているので想像できるかと思うのですが、次に来る単語予測時には、注目している単語より後ろのものは使わないようにしています。
次に来る単語を予測した文(上の図だと「猫がベッド」の次の単語「で」)を入力として次に来る単語を予測して……という事を何度も繰り返す事で文章を生成できます。出力を入力にし出力する、という繰り返しができるモデルを自己回帰モデルといいます。
なお、損失関数では交差エントロピー誤差を使用します。
fine tuningではGPTモデルに出力させたいと考えている内容に関わるデータを入力する事で、出力させるようにします。
出力する時に、新たなGPTに新たな層を付け加えるのですがそれをヘッドと言います。
fine tuningでの入力について
どういう内容をモデルにやってもらいたいかに関わらず、一つの文(トークン列)として渡すようにします。
論文中の図がとてもわかりやすかったので引用いたします。下の図を見てください。
("Improving Language Understanding by Generative Pre-Training"から引用しています。)
問題を与えて回答させる場合や、文の類似度を判定するときなどでもStartとExtractで挟みます。
一点注意が必要なのが、複数の文を入れるときは間に区切り文字(Delim)を入れる事です。トークンとしては$を使用します。
その他の情報
学習に使われたデータは4.5GBのテキストです。冊数にして7000冊を学習しています。
次に、パラメータは1億1700万個です! パラメータというのは、機械学習モデルを学習させるときにモデルの内部で調整してくれる設定の事で、その設定数が1億を超えています。
パラメータ数や学習データについて、今後GPT-2やGPT-3と比較できるようお伝えしました。
終わりに
本日はGPTの初代バージョンであるGPTについてご紹介してきました。かなりあっさりと終わってしまいますが、Transformerモデルを理解しているからこそ、GPTモデルの理解が素早くできます。Transformerモデルが基盤モデルと言われる所以ですね。
明日は、GPTの次のバージョンであるGPT-2についてご紹介していきます!
本日はここまで。よければ、明日もご覧ください!